home *** CD-ROM | disk | FTP | other *** search
/ SGI Varsity Update 1998 August / SGI Varsity Update 1998 August.iso / docs6.4 / relnotes / c_fe / ch4.z / ch4
Text File  |  1998-07-29  |  25KB  |  858 lines

  1.  
  2.  
  3.  
  4.                                                - 1 -
  5.  
  6.  
  7.  
  8.                     7.2.1 ANSI C Front-End Release Notes
  9.  
  10.  
  11.  
  12.  
  13.  
  14.  
  15.  
  16.  
  17.  
  18.  
  19.  
  20.  
  21.  
  22.  
  23.  
  24.  
  25.  
  26.  
  27.  
  28.  
  29.  
  30.  
  31.  
  32.  
  33.  
  34.  
  35.  
  36.  
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43.  
  44.  
  45.  
  46.  
  47.  
  48.  
  49.  
  50.  
  51.  
  52.  
  53.  
  54.  
  55.  
  56.  
  57.  
  58.  
  59.  
  60.  
  61.  
  62.  
  63.  
  64.  
  65.  
  66.  
  67.  
  68.                                                - 2 -
  69.  
  70.  
  71.  
  72.                     DDDDooooccccuuuummmmeeeennnntttt NNNNuuuummmmbbbbeeeerrrr 000000007777----1111666655559999----000011110000
  73.  
  74.  
  75.                     4.  _N_e_w__F_e_a_t_u_r_e_s__o_f__T_h_i_s__R_e_l_e_a_s_e
  76.  
  77.                     This chapter contains the differences between
  78.                     this release and the 7.2 release of the MIPSpro
  79.                     C compiler.  It also summarizes the differences
  80.                     between the  7.2 release and the 7.1 release of
  81.                     MIPSpro C compiler.
  82.  
  83.  
  84.                     4.1  _N_e_w__F_e_a_t_u_r_e_s__i_n__M_I_P_S_p_r_o__7_._2_._1
  85.  
  86.  
  87.  
  88.                     4.1.1  _I_n_l_i_n_e__M_e_m_o_r_y__I_n_t_r_i_n_s_i_c_s   The following
  89.                     new options which control the inlining of memory
  90.                     intrinsics
  91.                      have been added to the -_O_P_T option group:
  92.  
  93.  
  94.  
  95.  
  96.  
  97.  
  98.  
  99.  
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109.  
  110.  
  111.  
  112.  
  113.  
  114.  
  115.  
  116.  
  117.  
  118.  
  119.  
  120.  
  121.  
  122.  
  123.  
  124.  
  125.  
  126.  
  127.  
  128.  
  129.  
  130.  
  131.  
  132.  
  133.  
  134.                                                - 3 -
  135.  
  136.  
  137.  
  138.  
  139.                     -OPT:....
  140.  
  141.                       mem_intrinsics[=(OFF|ON)]
  142.                         Enable inlining of memory intrinsics
  143.                         (memcpy, memmove, memset, bcopy, bzero,
  144.                         blkclr) in some cases. This option has
  145.                         an effect only if the corresponding
  146.                         procedure has a "#pragma intrinsic"
  147.                         for it. The standard include files
  148.                         contain this pragma for these routines
  149.                         (string.h, memory.h, bstring.h, strings.h).
  150.                         Note that the pragmas are disabled by
  151.                         default with the -ansi option. The option
  152.                         -D__INLINE_INTRINSICS can be used to
  153.                         enable intrinsics in the -ansi mode.
  154.                         (default OFF)
  155.  
  156.  
  157.                       memcpy_cannot_overlap[(OFF|ON)]
  158.                         The compiler assumes by default that
  159.                         the operands of the "memcpy" routine
  160.                         can overlap. This option allows the
  161.                         compiler to assume that the operands do
  162.                         not overlap and can thus generate
  163.                         better code. (default OFF)
  164.  
  165.                       bcopy_cannot_overlap[(OFF|ON)]
  166.                         The compiler assumes by default that
  167.                         the operands of the "bcopy" routine
  168.                         can overlap. This option allows the
  169.                         compiler to assume that the operands
  170.                         do not overlap and can thus generate
  171.                         better code. (default OFF)
  172.  
  173.                       memmove_cannot_overlap[(OFF|ON)]
  174.                         The compiler assumes by default that the
  175.                         operands of the "memmove" routine can
  176.                         overlap. This option allows the compiler
  177.                         to assume that the operands do not overlap
  178.                         and can thus generate better code.
  179.                         (default OFF)
  180.  
  181.                       memmove_count=n
  182.                         Specify the maximum number of instructions
  183.                         that will be generated in the inline
  184.                         expansion for the memory intrinsics.
  185.                         (default 16)
  186.  
  187.  
  188.  
  189.  
  190.  
  191.  
  192.  
  193.  
  194.  
  195.  
  196.  
  197.  
  198.  
  199.  
  200.                                                - 4 -
  201.  
  202.  
  203.  
  204.                     4.2  _N_e_w__B_o_o_k_s
  205.  
  206.                     The _M_I_P_S_P_r_o _C _a_n_d _C++ _P_r_a_g_m_a_s is now available
  207.                     as an online document in the subsystem
  208.                     _c_o_m_p_i_l_e_r__d_e_v._b_o_o_k_s._P_r_a_g_m_a_s.  This revision of
  209.                     the manual, however, omits several pragmas that
  210.                     are supported:
  211.  
  212.  
  213.                     4.2.1  _#_p_r_a_g_m_a__c_o_n_c_u_r_r_e_n_t   #pragma concurrent
  214.                     instructs the compiler, when analyzing the loop
  215.                     immediately following this assertion, to ignore
  216.                     all dependences between two references to the
  217.                     same array.
  218.  
  219.  
  220.                     4.2.1.1  _U_s_i_n_g__#_p_r_a_g_m_a__c_o_n_c_u_r_r_e_n_t   The syntax
  221.                     of #pragma concurrent is as follows:
  222.  
  223.  
  224.                     #pragma concurrent
  225.  
  226.  
  227.                     There are five facts to be aware of when using
  228.                     this pragma:
  229.  
  230.  
  231.                        +o If multiple loops in a nest can be
  232.                          parallelized, #pragma concurrent causes the
  233.                          compiler to prefer the loop immediately
  234.                          following the pragma.
  235.  
  236.                        +o Applying this pragma to an inner loop may
  237.                          cause the loop to be made outermost by the
  238.                          compiler's loop interchange operations.
  239.  
  240.  
  241.                        +o #pragma concurrent does not affect how the
  242.                          compiler analyzes function calls.
  243.  
  244.  
  245.                        +o #pragma concurrent does not affect how the
  246.                          compiler analyzes dependences between two
  247.                          potentially aliased pointers.
  248.  
  249.  
  250.                        +o If there are real dependences between array
  251.                          references, #pragma concurrent may cause
  252.                          the compiler to generate incorrect code.
  253.  
  254.  
  255.  
  256.  
  257.  
  258.  
  259.  
  260.  
  261.  
  262.  
  263.  
  264.  
  265.  
  266.                                                - 5 -
  267.  
  268.  
  269.  
  270.                     4.2.2  _#_p_r_a_g_m_a__c_o_n_c_u_r_r_e_n_t__c_a_l_l   The #pragma
  271.                     concurrent call directive instructs the compiler
  272.                     to ignore the dependences of subroutine and
  273.                     function calls contained in the loop that
  274.                     follows the directive.
  275.  
  276.  
  277.                     4.2.2.1  _U_s_i_n_g__#_p_r_a_g_m_a__c_o_n_c_u_r_r_e_n_t__c_a_l_l   The
  278.                     syntax for #pragma concurrent call is as
  279.                     follows:
  280.  
  281.  
  282.                     #pragma concurrent call
  283.  
  284.  
  285.                     The pragma applies to the loop that immediately
  286.                     follows it and to all loops nested inside that
  287.                     loop.  To prevent incorrect parallelization,
  288.                     make sure the following conditions are met:
  289.  
  290.  
  291.                        +o A function inside the loop cannot read from
  292.                          a location that is written to during
  293.                          another iteration. This rule does not apply
  294.                          to a location that is a local variable
  295.                          declared inside the function.
  296.  
  297.                        +o A function inside the loop cannot write to
  298.                          a location that is read from or written to
  299.                          during another iteration. This rule does
  300.                          not apply to a location that is a local
  301.                          variable declared inside the function.
  302.  
  303.  
  304.                     4.2.2.2  _E_x_a_m_p_l_e_s__o_f__#_p_r_a_g_m_a__c_o_n_c_u_r_r_e_n_t__c_a_l_l
  305.  
  306.  
  307.  
  308.  
  309.  
  310.  
  311.  
  312.  
  313.  
  314.  
  315.  
  316.  
  317.  
  318.  
  319.  
  320.  
  321.  
  322.  
  323.  
  324.  
  325.  
  326.  
  327.  
  328.  
  329.  
  330.  
  331.  
  332.                                                - 6 -
  333.  
  334.  
  335.  
  336.                     Example 1
  337.  
  338.                     In this example the compiler ignores the dependences in the function
  339.                     fred() when it analyzes the following loop:
  340.  
  341.                     #pragma concurrent call
  342.                     for (i = 0; i < N; i++0
  343.                     {
  344.                         fred(...)
  345.                         ...
  346.                     }
  347.  
  348.                     void fred (...)
  349.                     {
  350.                         ...
  351.                     }
  352.  
  353.                     Example 2
  354.  
  355.                     The following code shows an illegal use of the assertion.
  356.                     Function fred() writes to variable T, which is also read
  357.                     from by wilma() during other iterations.
  358.  
  359.                     float A[M], B[M];
  360.                     int i, T;
  361.                     #pragma concurrent call
  362.                     for (i = 0; i < M; i++)
  363.                     {
  364.                         fred(B, i, &T);
  365.                         wilma(A, i, &T);
  366.                     }
  367.  
  368.                     void fred(float B[], int i, int* T)
  369.                     {
  370.                         *T = B[i];
  371.                     }
  372.  
  373.                     void wilma(float A[], int i, int* T)
  374.                     {
  375.                         A[i] = *T;
  376.                     }
  377.  
  378.                     By localizing the variable T, you can manually parallelize
  379.                     the above example safely. But the compiler does not know to
  380.                     localize T, and it illegally parallelizes the loop because of
  381.                     the assertion.
  382.  
  383.  
  384.  
  385.  
  386.  
  387.  
  388.  
  389.  
  390.  
  391.  
  392.  
  393.  
  394.  
  395.  
  396.  
  397.  
  398.                                                - 7 -
  399.  
  400.  
  401.  
  402.                     4.2.3  _#_p_r_a_g_m_a__p_e_r_m_u_t_a_t_i_o_n   When placed inside
  403.                     a subroutine, #pragma permutation tells the
  404.                     compiler that the specified array is a
  405.                     permutation array.
  406.  
  407.  
  408.                     4.2.3.1  _U_s_i_n_g__#_p_r_a_g_m_a__p_e_r_m_u_t_a_t_i_o_n   The syntax
  409.                     of #pragma permutation is as follows:
  410.  
  411.  
  412.                     #pragma permutation (array)
  413.  
  414.  
  415.                     The variable array is the name of a permutation
  416.                     array.  Every element of array has a distinct
  417.                     value. The directive does not require the
  418.                     permutation array to be dense.  In other words,
  419.                     while every array[1] must have a distinct value,
  420.                     there can be gaps between those values, such as
  421.                     array[1] = 1, array[2] = 4, array[3] = 9, and so
  422.                     on.
  423.  
  424.                     You can use this assertion to parallelize loops
  425.                     that use arrays for indirect addressing. Without
  426.                     this directive, the compiler cannot determine
  427.                     that the array elements used as indexes are
  428.                     distinct.
  429.  
  430.                     This pragma affects every loop in a subroutine,
  431.                     even those that appear ahead of it.
  432.  
  433.  
  434.  
  435.                     4.3  _N_e_w__F_e_a_t_u_r_e_s__i_n__M_I_P_S_p_r_o__7_._2
  436.  
  437.  
  438.  
  439.                     4.3.1  _R_e_p_a_c_k_a_g_i_n_g__o_f__F_r_o_n_t_-_E_n_d__S_u_b_s_y_s_t_e_m_s
  440.                     Starting with the 7.2 release, the C compiler
  441.                     front-end is packaged in its own subsystem on a
  442.                     separate CD. For proper installation, you must
  443.                     install _c_o_m_p_i_l_e_r__d_e_v, _c_o_m_p_i_l_e_r__e_o_e and _c__d_e_v
  444.                     from the IRIX Development Foundation CD as well
  445.                     as _c__f_e from the MIPSpro C Compiler CD.
  446.  
  447.  
  448.  
  449.                     4.3.2  _N_e_w__O_p_t_i_o_n_s__a_n_d__D_e_f_a_u_l_t_s   A new
  450.                     -_D_E_B_U_G:_o_p_t_i_o_n control group has been created to
  451.                     allow insertion of code to assist in the
  452.                     debugging of programs.  For example,
  453.  
  454.  
  455.  
  456.  
  457.  
  458.  
  459.  
  460.  
  461.  
  462.  
  463.  
  464.                                                - 8 -
  465.  
  466.  
  467.  
  468.                     -_D_E_B_U_G:_d_i_v__c_h_e_c_k=_N replaces -_T_E_N_V:_c_h_e_c_k__d_i_v=_N
  469.                     and the 7.2 compiler, by default, inserts code
  470.                     to check for divide by zero (N=1).
  471.  
  472.                     _N_O_T_E:  The default value for -_T_E_N_V:_c_h_e_c_k__d_i_v=_N
  473.                     under MIPSpro 7.1 was N=0 (no checks).
  474.  
  475.                     For more information, please refer to the _c_c(1)
  476.                     and _D_E_B_U_G__g_r_o_u_p(5) man pages.
  477.  
  478.                     The -_L_I_S_T: options control group has been
  479.                     enhanced to the create a listing file (.l) that
  480.                     contains the values of all flags  modified,
  481.                     directly in the command line, or indirectly as a
  482.                     side effect of other options. For example:
  483.  
  484.                     % cc -n32 -LIST:options=ON foo.c
  485.  
  486.                     will create foo.l which contains a listing that
  487.                     contains the default values of certain options
  488.                     from the -OPT, -LNO, -TARG and -TENV option
  489.                     control groups.
  490.  
  491.                     The following command:
  492.  
  493.                     % cc -n32 -LIST:all_options=ON foo.c
  494.  
  495.                     will create foo.l which contains a listing that
  496.                     contains the default values of all options from
  497.                     all of the option control groups.
  498.  
  499.                     For more information, please refer to the _c_c(1)
  500.                     man page.
  501.  
  502.  
  503.                     4.3.3  _O_b_s_o_l_e_t_e__O_p_t_i_o_n_s   Several compile-time
  504.                     flags have been obsoleted.  These include:
  505.                     -_T_E_N_V:_m_i_s_a_l_i_g_n_e_m_n_t=_N, -_T_E_N_V:_a_l_i_g_n__e_x_t_e_r_n=_N and
  506.                     -_T_E_N_V:_a_l_i_g_n_e_d=_T_R_U_E.  Their use will generate a
  507.                     warning message in both the compiler front-end
  508.                     and backend. For example:
  509.  
  510.                     % cc -n32 -TENV:misalignment=3 reshape.c
  511.                     Warning: Obsolete option "-TENV:misalignment=3" -- ignored
  512.                     Warning: Obsolete option "-TENV:misalignment=3" -- ignored
  513.  
  514.                     The -_T_E_N_V:_v_a_r_a_r_g_s__p_r_o_t_o_t_y_p_e_s=_T_R_U_E flag has been
  515.                     replaced by -_D_E_B_U_G:_v_a_r_a_r_g_s__p_r_o_t_o_t_y_p_e_s=_T_R_U_E.
  516.  
  517.                     For more information, please refer to the _c_c(1)
  518.                     and _D_E_B_U_G__g_r_o_u_p(5) man pages.
  519.  
  520.  
  521.  
  522.  
  523.  
  524.  
  525.  
  526.  
  527.  
  528.  
  529.  
  530.                                                - 9 -
  531.  
  532.  
  533.  
  534.                     4.3.4  _V_a_r_i_a_b_l_e__L_e_n_g_t_h__A_r_r_a_y_s   MIPSpro 7.2 now
  535.                     supports variable length arrays.  Array dummy
  536.                     arguments and local arrays can now be declared
  537.                     as variable length arrays rather than as
  538.                     pointers.  This allows the compiler to make
  539.                     assumptions about aliasing and can allow more
  540.                     optimizations to be applied to code containing
  541.                     references to the array.  This is particularly
  542.                     beneficial for parallelization.  The syntax for
  543.                     variable length arrays is:
  544.  
  545.  
  546.                         int foo( int n, float a[n][n] ) {
  547.                            float b[n]
  548.                         }
  549.  
  550.  
  551.                     In the example above, dummy argument a and local
  552.                     variable b are both variable length arrays.
  553.  
  554.  
  555.                     4.3.5  _F_r_e_q_u_e_n_c_y__h_i_n_t__p_r_a_g_m_a_s   MIPSpro 7.2 now
  556.                     supports a new pragma "#pragma
  557.                     mips_freqency_hint" that is used to tell the
  558.                     compiler that a branch or function is rarely or
  559.                     frequently executed.  The compiler uses this
  560.                     information to make better optimization
  561.                     decisions. A branch can be marked as infreqently
  562.                     taken in this fashion:
  563.  
  564.  
  565.                         if ( a < b ) {
  566.                         #pragma mips_frequency_hint NEVER
  567.                            printf("error condition0);
  568.                         }
  569.  
  570.  
  571.                     While a function can be so marked this way:
  572.  
  573.  
  574.                         void handle_error( int i );
  575.                         #pragma mips_frequency_hint NEVER handle_error
  576.  
  577.  
  578.                     To specify that a block of code gets frequently
  579.                     executed, you can use:
  580.  
  581.                     #pragma mips_frequency_hint FREQUENT
  582.  
  583.                     Frequency information about a function gets
  584.                     propogated to all instances where the function
  585.  
  586.  
  587.  
  588.  
  589.  
  590.  
  591.  
  592.  
  593.  
  594.  
  595.  
  596.                                                - 10 -
  597.  
  598.  
  599.  
  600.                     is used. So a branch that contains a call to an
  601.                     infrequent function is considered infrequently
  602.                     executed itself.
  603.  
  604.  
  605.  
  606.                     4.3.6  _F_i_l_l__a_n_d__A_l_i_g_n__P_r_a_g_m_a__S_u_p_p_o_r_t   MIPSpro
  607.                     7.2 C supports new types of pragmas to
  608.                     facilitate padding and alignment of variables
  609.                     within cachelines and pages of memory. They are
  610.                     outlined below.
  611.  
  612.  
  613.                     #pragma fill_symbol (s, L1cacheline)
  614.                     #pragma fill_symbol (s, L2cacheline)
  615.                     #pragma fill_symbol (s, page)
  616.                     #pragma fill_symbol (s, <user-specified-power-of-two>)
  617.                     #pragma align_symbol (s, L1cacheline)
  618.                     #pragma align_symbol (s, L2cacheline)
  619.                     #pragma align_symbol (s, page)
  620.                     #pragma align_symbol (s, <user-specified-power-of-two>)
  621.  
  622.  
  623.                     The fill_symbol and align_symbol pragmas take a
  624.                     symbol (i.e. a variable that may be a C global,
  625.                     an automatic variable, but not a formal and not
  626.                     an element of a structured type like a struct or
  627.                     an array).  The second argument in the pragma
  628.                     may be one of the keywords L1cacheline (machine
  629.                     specific first-level cache line size, typically
  630.                     32 bytes), L2cacheline (machine specific
  631.                     second-level cache line size, typically 128
  632.                     bytes), page (machine specific page size,
  633.                     typically 16 Kbytes), or a user-specified
  634.                     power-of-two value.
  635.  
  636.                     The align_symbol pragma aligns the start of the
  637.                     named symbol at the specified alignment, i.e.
  638.                     the symbol "s" will start at the specified
  639.                     alignment boundary.
  640.  
  641.                     The fill_symbol pragma pads the named symbol
  642.                     with additional storage so that the symbol is
  643.                     assured not to overlap with any other data item
  644.                     within the storage of the specified size. The
  645.                     additional padding required is heuristically
  646.                     divided between each end of the specified
  647.                     variable. For instance, a fill_symbol pragma for
  648.                     the L1cacheline will guarantee that the
  649.                     specified symbol will not suffer from false-
  650.                     sharing for the L1 cache line.
  651.  
  652.  
  653.  
  654.  
  655.  
  656.  
  657.  
  658.  
  659.  
  660.  
  661.  
  662.                                                - 11 -
  663.  
  664.  
  665.  
  666.                     For global variables these pragma must be
  667.                     specified at the variable definition, and are
  668.                     optional at the declarations of the variable.
  669.  
  670.                     The align_symbol pragma is ineffective for local
  671.                     variables of fixed-size symbols, such as simple
  672.                     scalars or arrays of known size. The pragma
  673.                     continues to be effective for stack-allocated
  674.                     arrays of dynamically-determined size.
  675.  
  676.                     A variable cannot have both fill_symbol and
  677.                     align_symbol pragma applied to it.
  678.  
  679.  
  680.                     4.3.7  _E_n_h_a_n_c_e_m_e_n_t_s__f_o_r__M_u_l_t_i_p_r_o_c_e_s_s_i_n_g
  681.                     Several new enhancements related to
  682.                     multiprocessing have been made to MIPSpro C 7.2:
  683.  
  684.  
  685.                     4.3.7.1  _D_a_t_a__D_i_s_t_r_i_b_u_t_i_o_n__P_r_a_g_m_a_s   MIPSpro 7.2
  686.                     C now supports pragmas for page-level data
  687.                     distribution and dynamic redistribution. These
  688.                     include _p_a_g_e__p_l_a_c_e, _d_i_s_t_r_i_b_u_t_e, _d_i_s_t_r_i_b_u_t_e
  689.                     _r_e_s_h_a_p_e, _d_y_n_a_m_i_c, _r_e_d_i_s_t_r_i_b_u_t_e.
  690.  
  691.  
  692.  
  693.                     4.3.7.2  _O_t_h_e_r__N_e_w__M_P__P_r_a_g_m_a_s   The following
  694.                     list of pragmas are new for 7.2 and related to
  695.                     multiprocessing:  _c_o_n_c_u_r_r_e_n_t, _s_e_r_i_a_l, _c_o_n_c_u_r_r_e_n_t
  696.                     _c_a_l_l, _c_o_n_c_u_r_e_n_t_i_z_e, _n_o_c_o_n_c_u_r_r_e_n_t_i_z_e, _p_r_e_f_e_r
  697.                     _s_e_r_i_a_l, _p_r_e_f_e_r _c_o_n_c_u_r_r_e_n_t, _p_e_r_m_u_t_a_t_i_o_n.
  698.  
  699.                     The full set of pragmas supported by C are
  700.                     described in the new _M_I_P_S_p_r_o _C _a_n_d _C++ _P_r_a_g_m_a_s
  701.                     manual.
  702.  
  703.  
  704.  
  705.                     4.3.7.3  _M_P___S_L_A_V_E___S_T_A_C_K_S_I_Z_E  The stacksize of
  706.                     slave processes can be controlled through the
  707.                     environment variable MP_SLAVE_STACKSIZE, which
  708.                     may be set to the desired stacksize in bytes.
  709.                     The default value is 16 Mbytes (4 MB for greater
  710.                     than 64 threads).
  711.  
  712.  
  713.  
  714.                     4.3.8  _S_t_r_i_c_t_e_r__E_r_r_o_r__M_e_s_s_a_g_e   The example
  715.                     below would incorretly compile with MIPSpro 7.1
  716.                     without any errors. The MIPSpro 7.2 compilers
  717.  
  718.  
  719.  
  720.  
  721.  
  722.  
  723.  
  724.  
  725.  
  726.  
  727.  
  728.                                                - 12 -
  729.  
  730.  
  731.  
  732.                     will emit an error:
  733.  
  734.                     Example:
  735.  
  736.                     %cat a.c
  737.                     struct st1_t;
  738.                     struct st2_t {
  739.                         struct st1_t st1;
  740.                     };
  741.                     struct st2_t st2;
  742.                     main()
  743.                     {
  744.                     }
  745.                     %cc -n32 -c a.c
  746.                     "a.c", line 3: error(1070): incomplete type is not allowed
  747.                      struct st1_t st1;
  748.                      ^
  749.  
  750.                     1 error detected in the compilation of "a.c".
  751.  
  752.                     The fix is to declare a complete type before its
  753.                     use.
  754.  
  755.  
  756.  
  757.                     4.3.9  _S_t_r_i_c_t_e_r__W_a_r_n_i_n_g__M_e_s_s_a_g_e   The C compiler
  758.                     now checks the arguments with the corresponding
  759.                     conversion specification in the format strings
  760.                     of calls to printf(), sprintf(), fprintf(),
  761.                     scanf(), fscanf, and sscanf(). This can result
  762.                     in the following warning:
  763.  
  764.                     warning/error(1178): argument is incompatible with corresponding
  765.                     format string conversion
  766.  
  767.                     This is normally a warning. However, it will be
  768.                     reported as an error if the -_d_i_a_g__e_r_r_o_r option
  769.                     is used. The fix is to use the correct
  770.                     conversion character for the type of the
  771.                     argument.
  772.  
  773.  
  774.  
  775.                     4.3.10  _P_R_I_N_T_F_L_I_K_E___l_i_n_t___s_t_y_l_e___c_o_m_m_e_n_t   These
  776.                     are lint comments for checking validity of
  777.                     arguments They applies lint style check to the
  778.                     first (n-1) arguments as usual. The nth argument
  779.                     is interpreted as a printf format string that is
  780.                     used to check the remaining arguments.
  781.  
  782.  
  783.  
  784.  
  785.  
  786.  
  787.  
  788.  
  789.  
  790.  
  791.  
  792.  
  793.  
  794.                                                - 13 -
  795.  
  796.  
  797.  
  798.                     4.3.11  _S_C_A_N_F_L_I_K_E___l_i_n_t___s_t_y_l_e___c_o_m_m_e_n_t   This
  799.                     comment applies lint style check to the first
  800.                     (n-1) arguments as usual. The nth argument is
  801.                     interpreted as a scanf format string that is
  802.                     used to check the remaining arguments.
  803.  
  804.  
  805.  
  806.  
  807.  
  808.  
  809.  
  810.  
  811.  
  812.  
  813.  
  814.  
  815.  
  816.  
  817.  
  818.  
  819.  
  820.  
  821.  
  822.  
  823.  
  824.  
  825.  
  826.  
  827.  
  828.  
  829.  
  830.  
  831.  
  832.  
  833.  
  834.  
  835.  
  836.  
  837.  
  838.  
  839.  
  840.  
  841.  
  842.  
  843.  
  844.  
  845.  
  846.  
  847.  
  848.  
  849.  
  850.  
  851.  
  852.  
  853.  
  854.  
  855.  
  856.  
  857.